package com.chinawayltd.ews.sample.mapper.task;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.chinawayltd.ews.sample.model.TTaskNode;
import com.chinawayltd.ews.sample.model.task.TaskMaterielVO;
import com.chinawayltd.ews.sample.model.task.TaskNodeVO;
import com.chinawayltd.ews.sample.model.task.TaskOrderNodeVO;
import com.chinawayltd.ews.sample.web.query.TaskGirdQuery;

/**
 * @program: greeProject
 * @description 任务流程节点
 * @author: chenxin
 * @create: 2018年4月27日 下午2:47:00
 */
@Mapper
public interface TaskNodeExtendMapper {

	/**
	 * 查询任务的节点列表
	 * @author: chenxin
	 * @date: 2018年4月27日
	 * @param taskId
	 * @return
	 */
	List<TaskNodeVO> getTaskNodeList(@Param("taskId") Long taskId);
	/**
	 * 根据订单id串和站点id查询站点对应的货物信息
	 * @author: chenxin
	 * @date: 2018年4月27日
	 * @param ids
	 * @param startPlaceId
	 * @return
	 */
	List<TaskMaterielVO> getTaskMaterielListByBranchId(@Param("ids")String[] ids, @Param("startPlaceId")Long startPlaceId);

	/**
	 * 根据节点id查询站点对应的货物信息
	 * @author: chenxin
	 * @date: 2018年4月27日
	 * @param nodeId
	 * @return
	 */
	List<TaskMaterielVO> getTaskMaterielListByNodeId(@Param("nodeId")Long nodeId);
	
	/**
	 * 对应的货物信息
	 * @author: chenxin
	 * @date: 2018年4月27日
	 * @param nodeId
	 * @return
	 */
	List<TaskMaterielVO> getTaskMaterielListByNodeIdAndOrderId(@Param("nodeId")Long nodeId, @Param("orderId")Long orderId);
	
	/**
	 * 修改任务节点执行状态
	 * @author: chenxin
	 * @date: 2018年5月3日
	 * @param map
	 * @return
	 */
	int updateTaskNodeByNodeIdAndStatus(Map<String, Object> map);
	
	/**
	 * 任务节点执行完成
	 * @author: chenxin
	 * @date: 2018年5月3日
	 * @param map
	 * @return
	 */
	int completeTaskNodeByNodeIdAndStatus(Map<String, Object> map);
	
	/**
	 * 根据节点对象查询未完成的前节点
	 * @author: chenxin
	 * @date: 2018年5月4日 下午3:08:56
	 * @param node
	 * @return
	 */
	List<TTaskNode> getBeforeNode(TTaskNode node);
	
	/**
	 * 根据任务id查询未完成的节点：空表示此任务除去最终的一个完成类型外的节点都已完成
	 * @author: chenxin
	 * @date: 2018年5月4日 下午3:08:56
	 * @param node
	 * @return
	 */
	List<TTaskNode> getNoFinishNode(@Param("taskId")Long taskId);
	
	/**
	 * 根据任务id查询完成的节点
	 * @author: chenxin
	 * @date: 2018年5月4日 下午3:08:56
	 * @param node
	 * @return
	 */
	List<TTaskNode> getTaskFinishNode(@Param("taskId")Long taskId);
	/**
	 * 
	 * @author: chenxin
	 * @date: 2018年5月12日 下午3:34:52
	 * @param nodeId
	 * @return
	 */
	TaskNodeVO getTaskNodeVOById(@Param("nodeId")Long nodeId);
	
	/**
	 * 通过节点查询订单
	 * @author: chenxin
	 * @date: 2018年5月12日 下午4:00:23
	 * @param nodeId
	 * @return
	 * @throws Exception
	 */
	List<TaskOrderNodeVO> getNodeOrderByNodeId(@Param("nodeId")Long nodeId) throws Exception;
	/**
	 * 根据任务id和站点类型查询节点与订单信息
	 * @author: chenxin
	 * @date: 2018年5月14日 下午7:20:04
	 * @param taskId
	 * @param branchType
	 * @return
	 */
	List<TaskNodeVO> getOrderDetailByTaskAndBranch(@Param("taskId")Long taskId, @Param("branchType")String branchType);
	/**
	 * 查询组合节点的货物明细
	 * @author: chenxin
	 * @date: 2018年5月14日 下午7:25:28
	 * @param map
	 * @return
	 */
	List<TaskMaterielVO> getTaskMaterielListByNodeIds(@Param(value = "ids")String[] ids, @Param(value = "orderNo")String orderNo);
	/**
	 * 修改装卸货开始时间
	 * @author: chenxin
	 * @date: 2018年5月15日 下午9:36:05
	 * @param map
	 * @return
	 */
	int updateNodeExTendByNodeId(Map<String, Object> map);
	/**
	 * 修改装卸货完成时间 
	 * @author: chenxin
	 * @date: 2018年5月15日 下午9:36:29
	 * @param map
	 * @return
	 */
	int completeNodeExTendByNodeId(Map<String, Object> map);

	/**
	 * 删除任务节点
	 * @author: chenxin
	 * @date: 2018年5月4日 上午10:29:27
	 * @param id
	 * @return
	 */
	int deleteNoteByTaskId(@Param("id")long id);
	
	/**
	 * 删除任务的装卸货节点
	 * @author: chenxin
	 * @date: 2018年5月18日 上午11:08:06
	 * @param id
	 * @return
	 * @throws Exception
	 */
	int deleteTaskNoteExtendByTaskId(@Param("id")long id);
	
	/**
	 * 删除任务节点对应的订单关联
	 * @author: chenxin
	 * @date: 2018年5月18日 上午11:08:06
	 * @param id
	 * @return
	 * @throws Exception
	 */
	int deleteNoteOrderByTaskId(@Param("id")long id);
	/**
	 * 添加任务节点的实际完成时间
	 * @author: chenxin
	 * @date: 2018年6月1日 下午5:34:20
	 * @param nodeId
	 * @param date
	 */
	void updateNodeActualFinishTimeByNodeId(Map<String, Object> map);
	/**
	 * 根据任务id和节点类型完成结点
	 * @author: chenxin
	 * @date: 2018年6月15日 下午5:51:45
	 * @param map
	 * @return
	 */
	void completeTaskNodeByTaskIdAndNodeType(Map<String, Object> map);
	/**
	 * 卸货节点所有订单所有电梯口
	 * @author: chenxin
	 * @date: 2018年7月3日 下午4:49:42
	 * @param nodeId
	 * @return
	 */
	Map<String, Object> getNodeTotalLiftByNodeId(@Param("nodeId")Long nodeId);
}
